//https://leetcode.cn/problems/top-k-frequent-words/description/
//前k个高频单词
//给定一个单词列表 words 和一个整数 k ，返回前 k 个出现次数最多的单词。
//返回的答案应该按单词出现频率由高到低排序。如果不同的单词有相同出现频率， 按字典顺序 排序。

class Solution {
public:
    struct sortCom
    {
        bool operator()(const pair<string, int>& pr1, const pair<string, int>& pr2)
        {
            if(pr1.second > pr2.second)
                return true;
            else if(pr1.second == pr2.second)
            {
                return pr1.first > pr1.first;
            }

            return false;
        }
    };

    vector<string> topKFrequent(vector<string>& words, int k) {
        map<string, int> m;
        vector<string> ret;

        for(auto& e : words)
        {
            m[e]++;
        }

        vector<pair<string, int>> sortV(m.begin(), m.end());
        stable_sort(sortV.begin(), sortV.end(), sortCom());
        for(int i = 0; i < k; i++)
        {
            ret.push_back(sortV[i].first);
        }

        return ret;
    }
};